<?php

/**
 * 百度ECharts配置数据生成类库 数据系列
 *
 * @author hunter <784337144@qq.com>
 */
class Series {
	
	private $series = array();
	
	/**
	 * 驱动图表生成的数据内容数组，通用项
	 * 
	 * @param string       $type        图表类型，必要参数！如为空或不支持类型，则该系列数据不被显示。可选为： 
     *                                   'line'（折线图） | 'bar'（柱状图） | 'scatter'（散点图） | 'k'（K线图） 
     *                                   'pie'（饼图） | 'radar'（雷达图） | 'chord'（和弦图） | 'force'（力导向布局图） | 'map'（地图）
	 * @param string       $data        数据（详见series.data）
	 * @param string       $name        系列名称，如启用legend，该值将被legend.data索引相关
	 * @param array        $tooltip     提示框样式，仅对本系列有效，如不设则用option.tooltip（详见tooltip）,鼠标悬浮交互时的信息提示
	 * @param bool         $clickable   数据图形是否可点击，默认开启，如果没有click事件响应可以关闭
	 * @param array        $itemStyle   图形样式（详见itemStyle）
	 * @param array        $markPoint   标注（详见series.markPoint）
	 * @param array        $markLine    标线（详见series.markLine）
	 */
	public function __construct($data, $name = '', $tooltip = array(), $clickable = true, $itemStyle = array(), $markPoint = array(), $markLine = array()){
		$this->series['data'] = $data;
		$this->series['name'] = $name;
		if($tooltip){
			$this->series['tooltip'] = $tooltip;
		}
		$this->series['clickable'] = $clickable;
		if($itemStyle){
			$this->series['itemStyle'] = $itemStyle;
		}
		if($markPoint){
			$this->series['markPoint'] = $markPoint;
		}
		if($markLine){
			$this->series['markLine'] = $markLine;
		}
	}
	
	/**
	 * 驱动图表生成的数据内容数组，折线图
	 * 
	 * @param string       $stack       组合名称，双数值轴时无效，多组数据的堆积图时使用，
	 *                                   eg：stack:'group1'，则series数组中stack值等于'group1'的数据做堆积计算
	 * @param number       $xAxisIndex  xAxis坐标轴数组的索引，指定该系列数据所用的横坐标轴
	 * @param number       $yAxisIndex  yAxis坐标轴数组的索引，指定该系列数据所用的纵坐标轴
	 * @param string       $symbol      标志图形类型，默认自动选择（8种类型循环使用，不显示标志图形可设为'none'）
	 * @param num|arr|fun  $symbolSize  标志图形大小，可计算特性启用情况建议增大以提高交互体验。
	 *                                   可以是单个值，如果在 symbol 为图片的时候想要分别设置宽高防止图片被拉伸，
	 *                                   可以使用数组，其中数组第一个值是高，第二个值是宽。 
	 *                                   实现气泡图时symbolSize需为Function，气泡大小取决于该方法返回值，传入参数为当前数据项（value数组）。
	 * @param number       $symbolRotate 标志图形旋转角度[-180,180]
	 * @param bool         $showAllSymbol 标志图形默认只有主轴显示（随主轴标签间隔隐藏策略），如需全部显示可把showAllSymbol设为true
	 * @param bool         $smooth      平滑曲线显示，smooth为true时lineStyle不支持虚线 默认为false
	 * @param bool         $dataFilter  ECharts 会在折线图的数据数量大于实际显示的像素宽度（高度）的时候会启用优化，
	 *                                   对显示在一个像素宽度内的数据做筛选，该选项是指明数据筛选的策略。默认 nearst
	 *                                   可选 'nearest', 'min', 'max', 'average'。或者是使用自定义的筛选函数
	 * @param bool         $legendHoverLink   是否启用图例（legend）hover时的联动响应（高亮显示）默认 true
	 * @return array
	 */
	public function asLine($stack = '', $xAxisIndex = '', $yAxisIndex = '', $symbol = '', $symbolSize = '', $symbolRotate = '', $showAllSymbol = false, $smooth = false, $dataFilter = 'nearst', $legendHoverLink = true){
		$this->series['type'] = 'line';
		if($stack !== ''){
			$this->series['stack'] = $stack;
		}
		if($xAxisIndex !== ''){
			$this->series['xAxisIndex'] = $xAxisIndex;
		}
		if($yAxisIndex !== ''){
			$this->series['yAxisIndex'] = $yAxisIndex;
		}
		if($symbol !== ''){
			$this->series['symbol'] = $symbol;
		}
		if($symbolSize !== ''){
			$this->series['symbolSize'] = $symbolSize;
		}
		if($symbolRotate !== ''){
			$this->series['symbolRotate'] = $symbolRotate;
		}
		$this->series['showAllSymbol'] = $showAllSymbol;
		$this->series['smooth'] = $smooth;
		$this->series['dataFilter'] = $dataFilter;
		$this->series['legendHoverLink'] = $legendHoverLink;
		return $this->series;
	}
	
	/**
	 * 驱动图表生成的数据内容数组，柱状图，包括柱形图和条形图
	 * 
	 * @param string       $stack       组合名称，双数值轴时无效，多组数据的堆积图时使用，
	 *                                   eg：stack:'group1'，则series数组中stack值等于'group1'的数据做堆积计算
	 * @param number       $xAxisIndex  xAxis坐标轴数组的索引，指定该系列数据所用的横坐标轴
	 * @param number       $yAxisIndex  yAxis坐标轴数组的索引，指定该系列数据所用的纵坐标轴
	 * @param num|str      $barGap      柱间距离，默认为柱形宽度的30%，可设固定值
	 * @param num|str      $barCategoryGap  类目间柱形距离，默认为类目间距的20%，可设固定值
	 * @param number       $barMinHeight  柱条最小高度，可用于防止某item的值过小而影响交互 默认为0
	 * @param number       $barWidth  柱条（K线蜡烛）宽度，不设时自适应
	 * @param number       $barMaxWidth  柱条（K线蜡烛）最大宽度，不设时自适应
	 * @param bool         $legendHoverLink   是否启用图例（legend）hover时的联动响应（高亮显示）默认 true
	 * @return array
	 */
	public function asBar($stack = '', $xAxisIndex = '', $yAxisIndex = '', $barGap = '', $barCategoryGap = '', $barMinHeight = '', $barWidth = '', $barMaxWidth = '', $legendHoverLink = true){
		$this->series['type'] = 'bar';
		if($stack !== ''){
			$this->series['stack'] = $stack;
		}
		if($xAxisIndex !== ''){
			$this->series['xAxisIndex'] = $xAxisIndex;
		}
		if($yAxisIndex !== ''){
			$this->series['yAxisIndex'] = $yAxisIndex;
		}
		if($barGap !== ''){
			$this->series['barGap'] = $barGap;
		}
		if($barCategoryGap !== ''){
			$this->series['barCategoryGap'] = $barCategoryGap;
		}
		if($barMinHeight !== ''){
			$this->series['barMinHeight'] = $barMinHeight;
		}
		if($barWidth !== ''){
			$this->series['barWidth'] = $barWidth;
		}
		if($barMaxWidth !== ''){
			$this->series['barMaxWidth'] = $barMaxWidth;
		}
		$this->series['legendHoverLink'] = $legendHoverLink;
		return $this->series;
	}
	
	/**
	 * 驱动图表生成的数据内容数组，饼形图
	 * 
	 * @param array        $center            圆心坐标，支持绝对值（px）和百分比，百分比计算min(width, height) * 50%
	 * @param num|arr      $radius            半径，支持绝对值（px）和百分比，百分比计算比，min(width, height) / 2 * 75%， 传数组实现环形图，[内半径，外半径]
	 * @param number       $startAngle        开始角度, 饼图（90）、仪表盘（225），有效输入范围：[-360,360]
	 * @param number       $minAngle          最小角度，可用于防止某item的值过小而影响交互，默认没限制0
	 * @param bool         $clockWise         显示是否顺时针 默认true
	 * @param string       $roseType          南丁格尔玫瑰图模式，'radius'（半径） | 'area'（面积）默认空
	 * @param number       $selectedOffset    选中是扇区偏移量 默认10
	 * @param bool         $selectedMode      选中模式，默认关闭，可选single，multiple
	 * @param bool         $legendHoverLink   是否启用图例（legend）hover时的联动响应（高亮显示）默认 true
	 * @return array
	 */
	public function asPie($center = array('50%', '50%'), $radius = array(0, '75%'), $startAngle = 90, $minAngle = 0, $clockWise = true, $roseType = '', $selectedOffset = 10, $selectedMode = '', $legendHoverLink = true){
		$this->series['type'] = 'pie';
		$this->series['center'] = $center;
		$this->series['radius'] = $radius;
		$this->series['startAngle'] = $startAngle;
		$this->series['minAngle'] = $minAngle;
		$this->series['clockWise'] = $clockWise;
		if($roseType !== ''){
			$this->series['roseType'] = $roseType;
		}
		$this->series['selectedOffset'] = $selectedOffset;
		if($selectedMode !== ''){
			$this->series['selectedMode'] = $selectedMode;
		}
		$this->series['legendHoverLink'] = $legendHoverLink;
		return $this->series;
	}
	
	/**
	 * 驱动图表生成的数据内容数组，字符云
	 * 
	 * @param array        $center            字符云中心位置，支持绝对值（px）和百分比
	 * @param array        $size              字符云大小，支持绝对值（px）和百分比
	 * @param array        $textRotation      文字旋转角度可选列表，默认会随机从水平（0）和垂直（90）两个方向中选择，可以设置多个可选角度，例如 [0, -45, 45, 90]
	 * @param array        $autoSize          字体大小自动计算配置，默认开启自动计算，
	 *                                         程序会根据每个数据的 value 大小以及画布的大小控制字体大小以达到最佳的显示效果。minSize 可以强制最小字体。 
	 *                                         关闭的时候字体大小取 itemStyle.normal.textStyle.fontSize，建议开启。
	 * @param array        $itemStyle         参见itemStyle
	 * @return array
	 */
	public function asWordCloud($center = array('50%', '50%'), $size = array('40%', '40%'), $textRotation = array(0, 90), $autoSize = '', $itemStyle = array()){
		$this->series['type'] = 'word_cloud';
		$this->series['center'] = $center;
		$this->series['size'] = $size;
		$this->series['textRotation'] = $textRotation;
		if($autoSize !== ''){
			$this->series['autoSize'] = $autoSize;
		}
		$this->series['selectedOffset'] = $selectedOffset;
		if($selectedMode !== ''){
			$this->series['selectedMode'] = $selectedMode;
		}
		$this->series['legendHoverLink'] = $legendHoverLink;
		return $this->series;
	}
}
